home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / apl / gview120.lzh / gviewsrc.lzh / pi_load.c < prev    next >
C/C++ Source or Header  |  1995-02-12  |  2KB  |  84 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2.  
  3. #include    <corlib.h>
  4. #include    <sys_doslib.h>
  5. #include    "gview.h"
  6.  
  7. static int        sizex, sizey;
  8. static unsigned char    com[256];
  9.  
  10. static
  11. size_check( fname )
  12. char    *fname;
  13. {
  14.     int    fn;
  15.     unsigned char    *p;
  16.     if( (fn= OPEN( fname, 0 )) >= 0 ){
  17.         READ( fn, p= com, 256 );
  18.         CLOSE( fn );
  19.         if( *p != 'P' || p[1] != 'i' ){
  20.             GV_Err( "piフォーマットが違います" );
  21.             return    FALSE;
  22.         }
  23.         for( com[255]= 0x1a ; *p != 0x1a ; p++ );
  24.         *p++= '\0';
  25.         for( com[255]= 0    ; *p != 0x00 ; p++ );
  26.         p++;        /* skip 0    */
  27.         p++;        /* skip 1    */
  28.         p++;        /* 比率0    */
  29.         p++;        /* 比率1    */
  30.         p++;        /* skip 1 !=4 nopi */
  31.         p+= 4;        /* 機種 'X68K'    */
  32.         {
  33.             int    len= (*p<<8)+p[1];
  34.             p+= 2;    /* 機種ユニークヘッダサイズ */
  35.             for(; len-- ; p++ );
  36.         }
  37.         sizex= (*p<<8)+p[1];    p+= 2;
  38.         sizey= (*p<<8)+p[1];    p+= 2;
  39.         return    TRUE;
  40.     }
  41.     GV_Err( "piオープンできません" );
  42.     return    FALSE;
  43. }
  44.  
  45. GVIEW *
  46. GV_Load_Pi( fname )
  47. char    *fname;
  48. {
  49.     if( size_check( fname ) ){
  50.         char    *bufp;
  51.         GVIEW    *gp;
  52.         extern unsigned char    Pi_PaletteBuff[];
  53.         if( !(gp= GV_Alloc( sizex, sizey, WindowAttrGraphic16,
  54.                         fname, com+2, 1024*3 )) ){
  55.             GV_Err( "メモリが足りません" );
  56.             return    NULL;
  57.         }
  58.         if( PiLoad( fname, gp->buf, sizex*sizey+2048+3+128,
  59.                         0, 0, -1, -1, 100, 3 ) < 0 ){
  60.             GV_Err( "pi展開エラー" );
  61.             MFREE( gp );
  62.             return    NULL;
  63.         }
  64.         {
  65.             unsigned char    *str= gp->base_palet,
  66.                     *ptr= Pi_PaletteBuff;
  67.             int    i;
  68.             for( i= 0 ; i< 16 ; i++, ptr+= 3 ){
  69.                 *str++= ptr[1];
  70.                 *str++= ptr[0];
  71.                 *str++= ptr[2];
  72.             }
  73.             GV_BaseToPalet( gp );
  74.         }
  75.         {
  76.             unsigned short    *str= gp->buf, *ptr= gp->buf+2048/2;
  77.             int    len= sizex*sizey/2;
  78.             for(; len-- ; *str++= *ptr++ );
  79.         }
  80.         return    gp;
  81.     }
  82.     return    NULL;
  83. }
  84.